home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1997 December / PC Pro December 1997 CD-Rom coverdisc.iso / symantec / dbAnywh / JAVA.BIN / CLASSES.ZIP / sun / tools / tree / InstanceOfExpression.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-14  |  3.1 KB  |  80 lines

  1. package sun.tools.tree;
  2.  
  3. import java.io.PrintStream;
  4. import java.util.Hashtable;
  5. import sun.tools.asm.Assembler;
  6. import sun.tools.asm.Label;
  7. import sun.tools.java.ClassNotFound;
  8. import sun.tools.java.Constants;
  9. import sun.tools.java.Environment;
  10. import sun.tools.java.Type;
  11.  
  12. public class InstanceOfExpression extends BinaryExpression {
  13.    public InstanceOfExpression(int var1, Expression var2, Expression var3) {
  14.       super(25, var1, Type.tBoolean, var2, var3);
  15.    }
  16.  
  17.    public long checkValue(Environment var1, Context var2, long var3, Hashtable var5) {
  18.       var3 = super.left.checkValue(var1, var2, var3, var5);
  19.       super.right = new TypeExpression(super.right.where, super.right.toType(var1, var2));
  20.       if (!super.right.type.isType(13) && !super.left.type.isType(13)) {
  21.          if (!super.right.type.inMask(1536)) {
  22.             var1.error(super.right.where, "invalid.arg.type", super.right.type, Constants.opNames[super.op]);
  23.             return var3;
  24.          } else {
  25.             try {
  26.                if (!var1.explicitCast(super.left.type, super.right.type)) {
  27.                   var1.error(super.where, "invalid.instanceof", super.left.type, super.right.type);
  28.                }
  29.             } catch (ClassNotFound var7) {
  30.                var1.error(super.where, "class.not.found", var7.name, Constants.opNames[super.op]);
  31.             }
  32.  
  33.             return var3;
  34.          }
  35.       } else {
  36.          return var3;
  37.       }
  38.    }
  39.  
  40.    public Expression inline(Environment var1, Context var2) {
  41.       return super.left.inline(var1, var2);
  42.    }
  43.  
  44.    public Expression inlineValue(Environment var1, Context var2) {
  45.       super.left = super.left.inlineValue(var1, var2);
  46.       return this;
  47.    }
  48.  
  49.    public void codeValue(Environment var1, Context var2, Assembler var3) {
  50.       super.left.codeValue(var1, var2, var3);
  51.       if (super.right.type.isType(10)) {
  52.          var3.add(super.where, 193, var1.getClassDeclaration(super.right.type));
  53.       } else {
  54.          var3.add(super.where, 193, super.right.type);
  55.       }
  56.    }
  57.  
  58.    void codeBranch(Environment var1, Context var2, Assembler var3, Label var4, boolean var5) {
  59.       this.codeValue(var1, var2, var3);
  60.       var3.add(super.where, var5 ? 154 : 153, var4);
  61.    }
  62.  
  63.    public void code(Environment var1, Context var2, Assembler var3) {
  64.       super.left.code(var1, var2, var3);
  65.    }
  66.  
  67.    public void print(PrintStream var1) {
  68.       var1.print("(" + Constants.opNames[super.op] + " ");
  69.       super.left.print(var1);
  70.       var1.print(" ");
  71.       if (super.right.op == 147) {
  72.          var1.print(super.right.type.toString());
  73.       } else {
  74.          super.right.print(var1);
  75.       }
  76.  
  77.       var1.print(")");
  78.    }
  79. }
  80.